<!DOCTYPE html>
<html lang="en">
<head>
  <meta name="generator" content=
  "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">

  <title>Checker Framework Tutorial - Getting Started - Command
  Line</title>
  <link href="bootstrap/css/bootstrap.css" rel="stylesheet" type=
  "text/css">
  <script type="text/javascript" src="bootstrap/js/bootstrap.min.js">
</script>
  <link href="css/main.css" rel="stylesheet" type="text/css">
  <link rel="icon" type="image/png" href=
  "https://checkerframework.org/favicon-checkerframework.png">
</head>

<body>
  <div class="top_liner"></div>

  <div class="navbar navbar-inverse navbar-fixed-top" style=
  "border-bottom: 1px solid #66d;">
    <div class="navbar-inner">
      <div class="contained">
        <ul class="nav">
          <li class="heading">Checker Framework:</li>

          <li><a href="https://checkerframework.org/">Main Site</a></li>

          <li><a href=
          "https://checkerframework.org/manual/">
          Manual</a></li>

          <li><a href=
          "https://groups.google.com/forum/#!forum/checker-framework-discuss">
          Discussion List</a></li>

          <li><a href=
          "https://github.com/typetools/checker-framework/issues">Issue
          Tracker</a></li>

          <li><a href=
          "https://github.com/typetools/checker-framework">Source
          Code</a></li>

          <li class="active"><a href=
          "https://checkerframework.org/tutorial/">Tutorial</a></li>
        </ul>
      </div>
    </div>
  </div><img src="https://checkerframework.org/CFLogo.png" alt="Checker Framework logo">

  <div class="page-header short" style=
  "border-bottom: 1px solid #EEE; border-top: none;">
    <h1>Checker Framework Tutorial</h1>
  </div>

  <div id="gettingstarteed">
    <div class="page-header short" style="border-top: none;">
      <h2>Getting Started</h2>
    </div>

    <div class="section">
      <p>This page walks you through a simple example to show how to use a
      type-checker
      from the command line.
      It shows how the Nullness
      Checker can be used to prevent null pointer exceptions.</p>
    </div>

    <div class="section">
      <h4>Outline</h4>

      <div class="well">
        <ol>
          <li><a href="#view">Manually spot the null pointer
          exception</a></li>

          <li><a href="#run1">Run the Nullness Checker to see how it can
          catch this error</a></li>

          <li><a href="#error">Correct the error</a></li>

          <li><a href="#run2">Run the Nullness Checker to verify that
          there are no more errors</a></li>
        </ol>
      </div>

      <div id="view">
        <h4>1. Spot the null pointer exception</h4>Begin by <b>viewing
        <a href=
        "../src/NullnessExample.java">NullnessExample.java</a></b>. (If
        you have not already, download <a href="../sourcefiles.zip">the
        source files</a> for the tutorial.)
        It is a simple Java program with an obvious null pointer exception.
        <pre>
public class NullnessExample {
    public static void main(String[] args) {
        Object myObject = null;
        System.out.println(myObject.toString());
    }
}
</pre>
      </div>

      <div id="run1">
        <h4>2. Run the Nullness Checker</h4>

        <p><b>Run the Nullness Checker</b> to see how it can warn you
        about this error at compile time.</p>

        <p>To run the Nullness Checker, run javac with command-line
        arguments <code>-processor
        org.checkerframework.checker.nullness.NullnessChecker</code>, as
        follows.</p>

        <p>(Note:  In this tutorial, the commands that you cut-and-paste
        to run on the command line appear in bold after a <code>$</code> prompt.)
        <br/>
        (Note: You should have already made
        <code>javacheck</code> <a href=
        "https://checkerframework.org/manual/#installation">
        an alias</a> to the Checker Framework compiler.)</p>
        <pre>
$ <strong>javacheck -processor org.checkerframework.checker.nullness.NullnessChecker NullnessExample.java</strong>
</pre>

        <p>The following error will be produced.</p>
        <pre>
NullnessExample.java:9: error: [dereference.of.nullable] dereference of possibly-null reference myObject
        System.out.println(myObject.toString());
                           ^
1 error
</pre>
      </div>

      <div id="error">
        <h4>3. Correct the error</h4>

        <p>Edit the code to <b>initialize the <code>myObject</code> variable</b>
        to some non-null value.</p>
        <pre>
public class NullnessExample {
    public static void main(String[] args) {
        Object myObject = <b>new Object()</b>;
        System.out.println(myObject.toString());
    }
}
</pre>
      </div>

      <div id="run2">
        <h4>4. Re-run the Nullness Checker</h4>
        <pre>
$ <b>javacheck -processor org.checkerframework.checker.nullness.NullnessChecker NullnessExample.java</b>
</pre>

        <p>No errors should be produced.</p>
      </div>

      <p>This was a very simple example to show how to use the Checker Framework
      from the command line.
      The next example is a little more complex.</p>
    </div>
  </div>

  <div id="end">
    <div class="page-header short">
      <h2><small>Next, try <a href="user-input-cmd.html">Validating
      User Input</a>, an example using the Regex Checker.</small></h2>
    </div>
  </div><!--
<div class="bottom_liner well">
    <a href="#">Top</a>
</div>
-->
  <!--  LocalWords:  Plugin plugin VM SDK plugins quals classpath
 -->
  <!--  LocalWords:  NullnessChecker plugin's
 -->
</body>
</html>
